#include<bits/stdc++.h>
#define int long long
using namespace std;
typedef pair<int,int> pii;
const int L1=2400,L2=7500;
inline int sq(int x){return x*x;}
struct frac{
  int x,y; frac(int a=0,int b=1):x(a),y(b){}
  inline void d(){int g=__gcd(x,y); x/=g,y/=g;}
  inline bool operator <(const frac &a)const{
    return x*a.y<y*a.x;
  }
  inline bool operator >(const frac &a)const{
    return x*a.y>y*a.x;
  }
};
inline void chmax(frac &x,frac y){if(y>x)x=y;}
class segtree{
  private:
    int n;
    vector<pii> B;
    vector<frac> S,T;
    inline void pushup(int u){
      S[u]=max(S[u<<1],S[u<<1|1]);
    }
    inline void pushdown(int u){
      if(T[u]>S[u<<1])S[u<<1]=T[u],T[u<<1]=T[u];
      if(T[u]>S[u<<1|1])S[u<<1|1]=T[u],T[u<<1|1]=T[u];
      T[u]=frac();
    }
  public:
    segtree(int n){
      B.resize(n<<2),S.resize(n<<2),T.resize(n<<2);
      function<void(int,int,int)> build=[&](int u,int l,int r){
        B[u]=make_pair(l,r);
        if(l==r)return;
        int m=l+r>>1;
        build(u<<1,l,m),build(u<<1|1,m+1,r);
      };
      build(1,0,n-1);
    }
    inline void update(int u,int l,int r,frac x){
      if(B[u].first>r||B[u].second<l)return;
      if(l<=B[u].first&&B[u].second<=r){
        S[u]=max(S[u],x),T[u]=max(T[u],x); return;
      }
      pushdown(u);
      update(u<<1,l,r,x),update(u<<1|1,l,r,x);
      pushup(u);
    }
    inline frac query(int u,int l,int r){
      if(B[u].first>r||B[u].second<l)return frac();
      if(l<=B[u].first&&B[u].second<=r)return S[u];
      pushdown(u);
      return max(query(u<<1,l,r),query(u<<1|1,l,r));
    }
};
main(){
  freopen("value.in","r",stdin);
  freopen("value.out","w",stdout);
  ios::sync_with_stdio(false);
  cin.tie(0); cout.tie(0);
  int n; frac c; cin>>n;
  vector<int> a(n);
  for(auto &i:a)cin>>i;
  int m; cin>>m;
  if(n<=1e5){
    vector<vector<pii> > q(n);
    for(int i=0;i<m;i++){
      int l,r; cin>>l>>r;
      q[r-1].emplace_back(l-1,i);
    }
    vector<frac> v(n),r(m);
    segtree t(n);
    for(int i=0;i<n;i++){
      for(int j=i,s=0;j>=max(i-L2,0ll);j--){
        int x=sq(s+=a[j]);
        chmax(v[j],frac(x,i-j+1));
        if(j)chmax(v[j-1],v[j]);
      }
      if(i>=L2)t.update(1,0,i-L2,v[i-L2]);
      for(auto e:q[i]){
        int l,p; tie(l,p)=e;
        if(l<i-L2)r[p]=t.query(1,l,i);
        else r[p]=v[l];
      }
    }
    for(frac &c:r)
      c.d(),cout<<c.x<<' '<<c.y<<'\n';
  }
  else{
    int l,r; cin>>l>>r,l--;
    vector<int> b(a.begin()+l,a.begin()+r);
    for(int i=0;i<b.size();i++)
      for(int j=i,s=0;j<min(i+L1,(int)b.size());j++)
        chmax(c,frac(sq(s+=b[j]),j-i+1));
    c.d(),cout<<c.x<<' '<<c.y<<endl;
  }
  return 0;
}